package slidingwindow.leetcode_1839;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;

/**
 * LeetCode 238 周赛第三题（没做出来）
 */
public class Solution {
    public int longestBeautifulSubstring(String word) {
        // 窗口
        LinkedList<Character> window = new LinkedList<>();
        // 使用 HashSet 来记录窗口中已经出现的字符种类，当出现 5 种时开始更新答案
        Set<Character> set = new HashSet<>();
        // 窗口指针
        int left = 0;
        int right = 0;

        int res= 0;
        while (right < word.length()) {
            char ch = word.charAt(right);
            // 将字符加入到窗口中的条件
            if (window.isEmpty() || ch >= window.peekLast()) {
                window.addLast(ch);
                set.add(ch);
                if (set.size() == 5) {
                    res = Math.max(res, window.size());
                }
            } else {
                /*
                    此时字符不符合加入窗口的规则：必须按字典序升序

                    这里左指针的移动策略：清空窗口中的所有元素
                 */
                window.clear();
                set.clear();
                left = right;
                window.addLast(ch);
                set.add(ch);
            }
            right++;
        }
        return res;
    }
}
